package com.hu.lsp.proxyTest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/** Student 类中，定义了一个私有变量 mName，用来表示 Student 的名字。接下去定义一个代理 handler，就是用来帮我们处理代理的 :
 * @Author lsp
 * @Date 2020/8/24 14:21
 * @Version 1.0
 */
public class PersonHandler<T>  implements InvocationHandler {
    private static final String TAG = "ProxyUtil";
    private static final Logger log = LoggerFactory.getLogger(PersonHandler.class);

    //代理的模板对象
    private T mTarget;
    public PersonHandler(T target){
        mTarget=target;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] objects) throws Throwable {
        //调用之前操作
        log.info(TAG+ "start: " + System.currentTimeMillis());
        // 调用方法,通过反射的形式来调用 mTarget 的 method \
        Object result= method.invoke(mTarget,objects);
        // 打印改名前的名字
        log.info(TAG+"log: " + (objects[0].toString()));

        // 调用结束后的操作
        log.info(TAG+ "finish: " + System.currentTimeMillis());
        return result;
    }
}
